天天基金爬虫 |
您所在的位置:网站首页 › wind 爬虫 › 天天基金爬虫 |
天天基金爬虫——天天基金爬取基金信息统计持仓净值
一、获取网页1、打开一个基金网页2、分析页面3、获取页面
二、解析数据1、查看需要的基本信息
三、统计求和1、步骤2、完整代码
四、喜欢的话请点个关注吧!不要忘了长按点赞一键三连哦!
一、获取网页
1、打开一个基金网页
我们先打开天天基金网,然后随便打开一个基金的页面。例如161725招商中证白酒指数。 链接: http://fund.eastmoney.com/161725.html. 我们发现天天基金的网址构成是http://fund.eastmoney.com/+基金编码+.html 我们右键点开检查,打开network,观察返回具体基金信息的文档是哪个。
测试一下,发现这回中文正常不乱码了。 先明确一下我们想要的信息有哪些,基本的话就净值和基金名字吧。 在网页检查中选中净值![]() 现在我们要先把之前获取的页面变成方便查找的形式,这里用到BeautifulSoup。 然后我们用find()按相应信息找出净值 import requests from bs4 import BeautifulSoup header={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36' } def getfund(code:str): url='http://fund.eastmoney.com/'+code+'.html' page=requests.get(url) html=str(page.content,'utf-8') #把content中的内容重新编码成utf-8 soup=BeautifulSoup(html,'lxml') value=soup.find_all('dd',{'class':'dataNums'})[1].find('span').getText() print(value)测试一下 没错是我们想要的。 同理获取基金名字和日期。 def getfund(code:str): url='http://fund.eastmoney.com/'+code+'.html' page=requests.get(url) html=str(page.content,'utf-8') #把content中的内容重新编码成utf-8 soup=BeautifulSoup(html,'lxml') value=soup.find_all('dd',{'class':'dataNums'})[1].find('span').getText() print(value) name=soup.find('a',{'href':url,'target':"_self"}).getText() print(name) date=soup.find('dl',{'class':"dataItem02"}).find('p').getText() print(date[6:-1])测试一下 好,没问题。 三、统计求和 1、步骤 先写一个字典存下持仓的基金编码和份额。 tips:这里只是举个例子,不代表任何投资建议,如有雷同纯属巧合 funds={ '004432':2673.06, '001156':739.65, '009265':893.87, '160222':2888.71, '009821':1000.00, '008903':2215.10, '161725':2513.26, '001475':1781.60, '161028':2571.06, '270002':2772.19, '008168':9905.49} 然后我们把getfund()函数返回值设置成净值吧。 def getfund(code:str): url='http://fund.eastmoney.com/'+code+'.html' page=requests.get(url) html=str(page.content,'utf-8') #把content中的内容重新编码成utf-8 soup=BeautifulSoup(html,'lxml') value=soup.find_all('dd',{'class':'dataNums'})[1].find('span').getText() name=soup.find('a',{'href':url,'target':"_self"}).getText() date=soup.find('dl',{'class':"dataItem02"}).find('p').getText()[6:-1] print("基金编号:",code,'\n基金名:',name,"\n日期:",date,"净值:",value) return float(value) 我们以此从字典中取出代码,获得净值后计算总市值,记得保留两位小数。 if __name__=='__main__': total=0 for code in funds: share=funds[code] price=share*getfund(code) total+=price print('份额:',share,'市值:','%.2f'%price) print('总计:','%.2f'%total)运行一下看看 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |